using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Charting._DataExchange
{
    /// <summary>
    /// <para>Import AIXM 5.1 Message</para>
    /// <para>Imports Aeronautical Information Exchange Model (AIXM) version 5.1 data into an aviation geodatabase.</para>
    /// <para>将航空信息交换模型 （AIXM） V5.1 数据导入航空地理数据库。</para>
    /// </summary>    
    [DisplayName("Import AIXM 5.1 Message")]
    public class ImportAIXM51Message : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ImportAIXM51Message()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_message_file">
        /// <para>Input AIXM 5.1 Message File</para>
        /// <para>The input AIXM 5.1 message.</para>
        /// <para>输入 AIXM 5.1 消息。</para>
        /// </param>
        /// <param name="_target_gdb">
        /// <para>Target Geodatabase</para>
        /// <para>The ArcGIS Aviation Charting schema workspace to import into.</para>
        /// <para>要导入到 ArcGIS Aviation Charting 方案的工作空间。</para>
        /// </param>
        public ImportAIXM51Message(object _in_message_file, object _target_gdb)
        {
            this._in_message_file = _in_message_file;
            this._target_gdb = _target_gdb;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "Import AIXM 5.1 Message";

        public override string CallName => "aviation.ImportAIXM51Message";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_message_file, _target_gdb, _in_tables, _update_existing_features.GetGPValue(), _updated_gdb];

        /// <summary>
        /// <para>Input AIXM 5.1 Message File</para>
        /// <para>The input AIXM 5.1 message.</para>
        /// <para>输入 AIXM 5.1 消息。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input AIXM 5.1 Message File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_message_file { get; set; }


        /// <summary>
        /// <para>Target Geodatabase</para>
        /// <para>The ArcGIS Aviation Charting schema workspace to import into.</para>
        /// <para>要导入到 ArcGIS Aviation Charting 方案的工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_gdb { get; set; }


        /// <summary>
        /// <para>Input Tables</para>
        /// <para>The names of tables used to restrict the feature types that will be imported.</para>
        /// <para>用于限制将要导入的要素类型的表的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Tables")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _in_tables { get; set; } = null;


        /// <summary>
        /// <para>Update Existing Features</para>
        /// <para><xdoc>
        ///   <para>Specifies whether existing features will be updated if they exist or new features will be inserted.
        ///   <bulletList>
        ///     <bullet_item>Checked—Existing features will be updated.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—New features will be inserted. This is default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是更新现有功能（如果存在）还是插入新功能。
        ///   <bulletList>
        ///     <bullet_item>选中 - 将更新现有要素。</bullet_item><para/>
        ///     <bullet_item>未选中—将插入新要素。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Existing Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_existing_features_value _update_existing_features { get; set; } = _update_existing_features_value._false;

        public enum _update_existing_features_value
        {
            /// <summary>
            /// <para>UPDATE_EXISTING</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_EXISTING")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>CREATE_NEW</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CREATE_NEW")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Geodatabase</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_gdb { get; set; }


        public ImportAIXM51Message SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}